//#version 120
attribute vec3 vPosition; //顶点的位置
uniform mat4 vMatrix;  //总变换矩阵
varying vec4 vDiffuse; //要变换传递的散射光变量
//反射光 = 材质反射系数 * 散射光强度 * max ( cos ( 入射角 ) , 0 )
//镜面光 = 材质反射系数 * 镜面光强度 * max ( 0 , cos ( 半向量与反向量的夹角 )  )
vec4 pointLight(vec3 normal ,vec3 lightLocation,vec4 lightDiffuse)
{
    //表面点于光源方向的向量
    //（normalize(x) 标准化向量，返回一个方向和X相同但长度为1的向量）
    vec3 vp = normalize(lightLocation - (vMatrix * vec4(vPosition,1)).xyz);
    //变化后的法向量
    vec3 newTarget = normalize((vMatrix * vec4(normal + vPosition,1)).xyz
                        - (vMatrix * vec4(vPosition ,1)).xyz);
    //散射光光照效果 = 材质发射系数（1） * 环境光强度 * max( cos (入射角)，0 )
    return lightDiffuse * max(0.0,dot(newTarget,vp));
}

void main() {
    //根据总变化矩阵计算此次绘制此顶点的位置
    gl_Position = vMatrix * vec4(vPosition,1);
    vec3 pos = vec3(10.0,10.0,10.0); // 光照的位置
    vec4 at = vec4(1.0,1.0,1.0,1.0); // 光照强度
    vDiffuse = pointLight(normalize(vPosition),pos,at);

}
